package cn.zhukelili.optimization2;

/**
 * @description: 场景类
 * @author: hhbeast
 * @since: 2018/7/25 23:45
 */
public class Client {
    public static void main(String[] args) {
        Context context = new Context();
        context.setLiftState(new ClosingState());
        context.open();
        context.close();
        context.run();
        context.stop();
    }
}

/*
Client场景类太简单了，只要定义一个电梯的初始状态，然后调用相关的方法，就完成
了，完全不用考虑状态的变更，运行结果完全相同，不再赘述。
我们再来回顾一下我们刚刚批判的上一段代码。首先是代码太长，这个问题已经解决
了，通过各个子类来实现，每个子类的代码都很短，而且也取消了switch...case条件的判断。
其次是不符合开闭原则，那如果在我们这个例子中要增加两个状态应该怎么做呢？增加两个
子类，一个是通电状态，另一个是断电状态，同时修改其他实现类的相应方法，因为状态要
过渡，那当然要修改原有的类，只是在原有类中的方法上增加，而不去做修改。再次是不符
合迪米特法则，我们现在的各个状态是单独的类，只有与这个状态有关的因素修改了，这个
类才修改，符合迪米特法则，非常完美!这就是状态模式。
 */
